package k.daniel.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 格式转换工具.用于做字符串<->Date<->long转换.<br>
 * 原理依托于SimpleDateFormat类。<br>
 * 字符串<---SimpleDateFormat--->Date<----getTime(),new Date()--->long<br>
 */
public class DateFormatUtil {
    public final static String FORMAT_YEAR = "yyyy";
    public final static String FORMAT_MONTH_DAY = "MM月dd日";

    public final static String FORMAT_DATE = "yyyy-MM-dd";
    public final static String FORMAT_TIME = "HH:mm";
    public final static String FORMAT_MONTH_DAY_TIME = "MM月dd日  hh:mm";

    public final static String FORMAT_DATE_TIME = "yyyy-MM-dd HH:mm:ss";//hh为24小时
    public final static String FORMAT_DATE_TIME_1 = "yyyy/MM/dd HH:mm";
    public final static String FORMAT_DATE_TIME_SECOND = "yyyy/MM/dd HH:mm:ss";

    private static SimpleDateFormat sdf = new SimpleDateFormat();
    private static final int YEAR = 365 * 24 * 60 * 60;// 年
    private static final int MONTH = 30 * 24 * 60 * 60;// 月
    private static final int DAY = 24 * 60 * 60;// 天
    private static final int HOUR = 60 * 60;// 小时
    private static final int MINUTE = 60;// 分钟

    /**
     * 获取指定时间距离当前时间描述性时间，如3分钟前，1天前,1个月前，1个小时前
     * @param timestamp 时间戳 单位为毫秒
     * @return 时间字符串
     */
    public static String getDescriptionTimeFromTimestamp(long timestamp) {
        long currentTime = System.currentTimeMillis();
        long timeGap = (currentTime - timestamp) / 1000;// 与现在时间相差秒数
        System.out.println("timeGap: " + timeGap);
        String timeStr = null;
        if (timeGap > YEAR) {
            timeStr = timeGap / YEAR + "年前";
        } else if (timeGap > MONTH) {
            timeStr = timeGap / MONTH + "个月前";
        } else if (timeGap > DAY) {// 1天以上
            timeStr = timeGap / DAY + "天前";
        } else if (timeGap > HOUR) {// 1小时-24小时
            timeStr = timeGap / HOUR + "小时前";
        } else if (timeGap > MINUTE) {// 1分钟-59分钟
            timeStr = timeGap / MINUTE + "分钟前";
        } else {// 1秒钟-59秒钟
            timeStr = "刚刚";
        }
        return timeStr;
    }

    // date类型转换为String类型
    // formatType格式为yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日 HH时mm分ss秒
    // data Date类型的时间
    public static String dateToString(Date data, String formatType) {
        return new SimpleDateFormat(formatType).format(data);
    }

    // long类型转换为String类型
    // currentTime要转换的long类型的时间
    // formatType要转换的string类型的时间格式
    public static String timeToString(long currentTime, String formatType) {
        String strTime = "";
        Date date = new Date(currentTime);// long类型转成Date类型
        strTime = dateToString(date, formatType); // date类型转成String
        return strTime;
    }

    // string类型转换为date类型
    // strTime要转换的string类型的时间，formatType要转换的格式yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日
    // HH时mm分ss秒，
    // strTime的时间格式必须要与formatType的时间格式相同
    public static Date stringToDate(String strTime, String patternString) {
        SimpleDateFormat formatter = new SimpleDateFormat(patternString);
        Date date = null;
        try {
            date = formatter.parse(strTime);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return date;
    }


    // 	// string类型转换为long类型
// 	// strTime要转换的String类型的时间
// 	// formatType时间格式
// 	// strTime的时间格式和formatType的时间格式必须相同
    public static long stringToTime(String strTime, String patternString) {
        Date date = stringToDate(strTime, patternString); // String类型转成date类型
        if (date == null) {
            return 0;
        } else {
            long currentTime = date.getTime(); // date类型转成long类型
            return currentTime;
        }
    }


//	/**
//	 * 获取聊天时间：因为sdk的时间默认到秒故应该乘1000
//	  * @Title: getChatTime
//	  * @Description: TODO
//	  * @param @param timesamp
//	  * @param @return
//	  * @return String
//	  * @throws
//	  */
//	public static String getChatTime(long timesamp) {
//		long clearTime = timesamp*1000;
//		String result = "";
//		SimpleDateFormat sdf = new SimpleDateFormat("dd");
//		Date today = new Date(System.currentTimeMillis());
//		Date otherDay = new Date(clearTime);
//		int temp = Integer.parseInt(sdf.format(today))
//				- Integer.parseInt(sdf.format(otherDay));
//		switch (temp) {
//		case 0:
//			result = "今天 " + getHourAndMin(clearTime);
//			break;
//		case 1:
//			result = "昨天 " + getHourAndMin(clearTime);
//			break;
//		case 2:
//			result = "前天 " + getHourAndMin(clearTime);
//			break;
//
//		default:
//			result = getTime(clearTime);
//			break;
//		}
//		return result;
//	}


}